package web.jdbc;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**获取目标实体所有成员的GET或SET方法<p>
 * {@link #getFieldGetOrSet(Class, String)} 返回HashMap&lt;Entity变量名，GET或SET&gt;
 * @author 乐渊
 * @version 1.0
 * */
public class FieldsGetSet {

	/**
	 * 获取变量名及其对应GET或SET方法
	 * @param clazz 目标实体类
	 * @param gs get或get
	 * @return map &lt;Entity变量名，GET或SET&gt;
	 */
	public static Map<Field, Method> getFieldGetOrSet(Class<?> clazz, String gs) {
		Map<Field, Method> map = new HashMap<>();
		Field[] fields = null;
		Method[] methods = null;

		if (clazz != null) {
			// 读取实体类的所有成员变量
			fields = clazz.getDeclaredFields();
			methods = clazz.getMethods();
		}

		//boolean 类型的get方法是is开头的，不是get
		for (Field field : fields) {
			String fName = field.getName();
			for (Method method : methods) {
				if (method.getReturnType() != boolean.class && method.getName().toLowerCase().equals(gs + fName.toLowerCase())){
					map.put(field, method);
					break;
				}else if(method.getReturnType() == boolean.class && gs.equals("get") && method.getName().toLowerCase().equals("is" + fName.toLowerCase())){
					map.put(field, method);
					break;
				}
			}
		}
		return map;
	}
}
